package org.zhangyp.n01jdkapi.n01oop.runtimepolymorphism;

import java.util.ArrayList;
import java.util.List;

/**
 * 音乐
 *
 * @author zhangyp
 * @date 2023/6/8 9:16
 */
public class Music {

    /**
     * 演奏方法
     * <p>
     * 乐器类(Instrument)有两个子类: Wind 和 Percussion，它们都覆盖了父类的 play() 方法，并且在 main() 方法中使用父类 Instrument 来引用 Wind 和 Percussion 对象。
     * 在 Instrument 引用调用 play() 方法时，会执行实际引用对象所在类的 play() 方法，而不是 Instrument 类的方法。
     * <p>
     * 运行时运行各自子类的方法，这就是运行时多态的体现
     *
     * @param: args
     * @return: void
     * @author: zhangyp
     * @date: 2023/6/8 9:21
     **/
    public static void main(String[] args) {
        List<Instrument> instruments = new ArrayList<>();
        instruments.add(new Wind());
        instruments.add(new Percussion());

        for (Instrument instrument : instruments) {
            instrument.play();
        }
    }
}
